package com.cms.recursoshumanos.json.object;

import java.util.Calendar;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.cms.recursoshumanos.cache.ListaContactosCache;
import com.cms.recursoshumanos.constant.Constant;
import com.cms.recursoshumanos.object.Contacto;
import com.cms.recursoshumanos.object.Departamento;
import com.cms.recursoshumanos.object.Empleado;
import com.cms.recursoshumanos.object.Persona;
import com.cms.recursoshumanos.object.Sede;
import com.cms.recursoshumanos.object.list.ListaContacto;
import com.cms.recursoshumanos.utilities.Tool;

public class JsonObjectGetContactos 
{

	private static JsonObjectGetContactos _instance = null;
	public static JsonObjectGetContactos getInstance() {
		if(_instance == null)
			_instance = new JsonObjectGetContactos();
		
		return _instance;
	}
	public JsonObjectGetContactos()
	{
	}
	private String Result;
	private static final String 
		GETCONTACTOS = "GETCONTACTOS",
		GETCONTACTOS_STATUS = "STATUS",
		GETCONTACTOS_DATA = "DATA",

		GETCONTACTOS_DATOS_CONTACTO = "DATOS_CONTACTO",
		GETCONTACTOS_CONTACTO_ID = "persona_id",
		GETCONTACTOS_CONTACTO_CI = "ci_persona",
		GETCONTACTOS_CONTACTO_NOMBRE_1 = "nombre_persona_1",
		GETCONTACTOS_CONTACTO_NOMBRE_2 = "nombre_persona_2",
		GETCONTACTOS_CONTACTO_APELLIDO_1 = "apellido_persona_1",
		GETCONTACTOS_CONTACTO_APELLIDO_2 = "apellido_persona_2",
		GETCONTACTOS_CONTACTO_NRO_TLF_1 = "nro_tlf_persona_1",
		GETCONTACTOS_CONTACTO_NRO_TLF_2 = "nro_tlf_persona_2",
		GETCONTACTOS_CONTACTO_FOTO = "url_foto_persona",
		GETCONTACTOS_CONTACTO_FECHA_NAC = "fecha_nacimiento", 
		GETCONTACTOS_CONTACTO_EMAIL = "email_persona",
		GETCONTACTOS_CONTACTO_SEXO = "sexo_persona",
	
		GETCONTACTOS_DEPARTAMENTO_ID = "departamento_id",
		GETCONTACTOS_DEPARTAMENTO_NOMBRE = "nombre_departamento",
		GETCONTACTOS_DEPARTAMENTO_DESCRIPCION = "descripcion_departamento",
		GETCONTACTOS_DEPARTAMENTO_FECHA_INIC = "fecha_inic_departamento",
		GETCONTACTOS_DEPARTAMENTO_FECHA_FIN = "fecha_fin_departamento",
		GETCONTACTOS_DEPARTAMENTO_DIRECCION = "direccion_departamento",
		GETCONTACTOS_CARGO_DEPARTAMENTO = "cargo_departamento",
				
		GETCONTACTOS_SEDE_ID = "sede_id",
		GETCONTACTOS_SEDE_NOMBRE = "nombre_sede",
		
		GETCONTACTOS_SUPERVISOR_ID = "superior_id",
		GETCONTACTOS_SUPERVISOR_NOMBRE_1 = "nombre_superior_1",
		GETCONTACTOS_SUPERVISOR_NOMBRE_2 = "nombre_superior_2",
		GETCONTACTOS_SUPERVISOR_CEDULA = "cedula_superior",
		GETCONTACTOS_SUPERVISOR_TLF_1 = "telefono_superior_1",
		GETCONTACTOS_SUPERVISOR_TLF_2 = "telefono_superior_2",
		GETCONTACTOS_SUPERVISOR_APELLIDO_1 = "apellido_superior_1",
		GETCONTACTOS_SUPERVISOR_APELLIDO_2 = "apellido_superior_2",
		GETCONTACTOS_SUPERVISOR_EMAIL = "email_superior";

	
	
	
	public void fromJSON (int position, String jsonString) 
	{
		if (jsonString != null)
		{
			if (!jsonString.equals(""))
			{
				try
				{
					JSONObject jsonObject = new JSONObject(jsonString);
				
					if (jsonObject != null) 
					{
						
						JSONObject getListaPersona = jsonObject.getJSONArray(GETCONTACTOS).getJSONObject(0);
						String status = getListaPersona.getString(GETCONTACTOS_STATUS);
						
						Result = status;
						
						if (status.equals(Constant.CODE_OK))
						{
		
							ListaContacto listaContacto = new ListaContacto();
							JSONArray data = getListaPersona.getJSONArray(GETCONTACTOS_DATA);
							JSONObject objeto_data = data.getJSONObject(0);
							JSONArray datos_persona = objeto_data.getJSONArray(GETCONTACTOS_DATOS_CONTACTO);
							
							for (int i = 0; i < datos_persona.length(); i++ )
							{
								JSONObject json_persona = datos_persona.getJSONObject(i);
								listaContacto.addContacto(this.getElContacto(json_persona));
							}
							Calendar cal = Calendar.getInstance();
							ListaContactosCache.getInstance().setFechaCache(cal.getTime());
							ListaContactosCache.getInstance().add_contact_lista(listaContacto);
							
							
						}
					}
				} 
				catch (JSONException ex) 
				{
					ex.printStackTrace();
					Result = Constant.CODE_EMPTY;
				}/*
				catch (Exception ex)
				{
					ex.printStackTrace();
					Result = Constant.CODE_EMPTY;
				}*/
			}
			else
			{
				Result = Constant.CODE_NOT_SERVER_RESPONSE;
			}
		}
		else
		{
			Result = Constant.CODE_NOT_SERVER_RESPONSE;
		}
	}
	public Persona getElSupervisor(JSONObject json_persona)
	{
		try 
		{
			
			if (json_persona.getString(GETCONTACTOS_SUPERVISOR_ID) == null)
			{
				return null;
			}
			
			Persona elSupervisor = new Persona(Integer.parseInt(json_persona.getString(GETCONTACTOS_SUPERVISOR_ID)), 
												json_persona.getString(GETCONTACTOS_SUPERVISOR_CEDULA), 
												json_persona.getString(GETCONTACTOS_SUPERVISOR_NOMBRE_1), 
												(json_persona.getString(GETCONTACTOS_SUPERVISOR_NOMBRE_2).equals("null") ? 
														null :
														json_persona.getString(GETCONTACTOS_SUPERVISOR_NOMBRE_2) ), 
												json_persona.getString(GETCONTACTOS_SUPERVISOR_APELLIDO_1), 
												json_persona.getString(GETCONTACTOS_SUPERVISOR_APELLIDO_2), 
												
												null, 
												json_persona.getString(GETCONTACTOS_SUPERVISOR_TLF_1), 
												(json_persona.getString(GETCONTACTOS_SUPERVISOR_TLF_2).equals("null") ? 
														null :
														json_persona.getString(GETCONTACTOS_SUPERVISOR_NOMBRE_2) ),
												null, 
												null, 
												null, 
												json_persona.getString(GETCONTACTOS_SUPERVISOR_EMAIL));
			return elSupervisor;
		} 
		catch (NumberFormatException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		} 
		catch (JSONException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
		
	}
	public Contacto getElContacto(JSONObject json_persona)
	{
		try 
		{
			
			Contacto elContacto = new Contacto(new Empleado( 
														new Persona(Integer.parseInt(json_persona.getString(GETCONTACTOS_CONTACTO_ID)),
																	json_persona.getString(GETCONTACTOS_CONTACTO_CI),
																	json_persona.getString(GETCONTACTOS_CONTACTO_NOMBRE_1),
																	(json_persona.getString(GETCONTACTOS_CONTACTO_NOMBRE_2).equals("null") ?
																			null :
																			json_persona.getString(GETCONTACTOS_CONTACTO_NOMBRE_2) ),
																	json_persona.getString(GETCONTACTOS_CONTACTO_APELLIDO_1), 
																	(json_persona.getString(GETCONTACTOS_CONTACTO_APELLIDO_2).equals("null") ?
																			null :
																			json_persona.getString(GETCONTACTOS_CONTACTO_APELLIDO_2)), 
																	null, 
																	json_persona.getString(GETCONTACTOS_CONTACTO_NRO_TLF_1),
																	(json_persona.getString(GETCONTACTOS_CONTACTO_NRO_TLF_2).equals("null") ? 
																			null:
																			json_persona.getString(GETCONTACTOS_CONTACTO_NRO_TLF_2)),
																	Constant.URL_PERSONA+"/"+json_persona.getString(GETCONTACTOS_CONTACTO_ID)+"/"+
																			json_persona.getString(GETCONTACTOS_CONTACTO_FOTO),
																	Tool.getInstance().parseStringToDate(json_persona.getString(GETCONTACTOS_CONTACTO_FECHA_NAC)),
																	json_persona.getString(GETCONTACTOS_CONTACTO_SEXO),
																	json_persona.getString(GETCONTACTOS_CONTACTO_EMAIL)),
																	new Departamento(Integer.parseInt(json_persona.getString(GETCONTACTOS_DEPARTAMENTO_ID)),
																						json_persona.getString(GETCONTACTOS_DEPARTAMENTO_NOMBRE),
																						json_persona.getString(GETCONTACTOS_DEPARTAMENTO_DESCRIPCION),
																						Tool.getInstance().parseStringToDate(json_persona.getString(GETCONTACTOS_DEPARTAMENTO_FECHA_INIC)),
																						Tool.getInstance().parseStringToDate(json_persona.getString(GETCONTACTOS_DEPARTAMENTO_FECHA_FIN)),
																						getElSupervisor(json_persona),
																						json_persona.getString(GETCONTACTOS_DEPARTAMENTO_DIRECCION)),
																	new Sede(Integer.parseInt(json_persona.getString(GETCONTACTOS_SEDE_ID)), 
																				json_persona.getString(GETCONTACTOS_SEDE_NOMBRE)),
																	json_persona.getString(GETCONTACTOS_CARGO_DEPARTAMENTO)
																	
													));
			return elContacto;
		} 
		catch (NumberFormatException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		} 
		catch (JSONException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
		
	}
	public String getResult()
	{
		return Result;
	}
	
}


